package br.com.mrh.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.mrh.dao.UsuarioDAO;
import br.com.mrh.entity.Usuario;
import br.com.mrh.entity.UsuarioAlteraSenha;
import br.com.mrh.exception.MRHAlertaException;
import br.com.mrh.exception.MRHErroException;
import br.com.mrh.util.Mensagens;

/**
 * Classe de servico do <b>Usuario</b>
 * 
 * @author alex.paula
 * @since 26/01/2012
 * @version 1.0
 */
@Service
public class UsuarioService extends BaseService {

	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = 1L;

	@Autowired
	private UsuarioDAO usuarioDAO;

	/**
	 * Servico de <i>Acesso ao Sistema</i>
	 * 
	 * @param usuario
	 * @return Usuario
	 * @throws MRHAlertaException
	 * @throws MRHErroException
	 */
	public Usuario acessarSistema(Usuario usuario) throws MRHAlertaException,
			MRHErroException {

		try {

			validaRetornoDB(usuarioDAO.acessarSistema(usuario));

			return (Usuario) retorno.getEntidades().get(0);

		} catch (MRHAlertaException e) {

			switch (retorno.getCodRetorno()) {
			case 1:
				throw e;

			case 2:
				throw new MRHAlertaException(
						getStringBolha(Mensagens.alertaUsuarioSenhaInvalidos));

			case 3:
				throw new MRHAlertaException(
						getStringBolha(Mensagens.alertaUsuarioInativo));

			default:
				throw new MRHErroException(
						getStringBolha(Mensagens.erroSistema));
			}

		} catch (Exception e) {
			throw new MRHErroException(getStringBolha(Mensagens.erroSistema));
		}

	}
	
	/**
	 * Servico de <i>Alteracao de Senha</i>
	 * @param usuarioAlteraSenha
	 * @throws MRHAlertaException
	 * @throws MRHErroException
	 */
	public void alterarSenha(UsuarioAlteraSenha usuarioAlteraSenha)
			throws MRHAlertaException, MRHErroException {
		try {

			validaRetornoDB(usuarioDAO.alterarSenha(usuarioAlteraSenha));

		} catch (MRHAlertaException e) {

			switch (retorno.getCodRetorno()) {
			case 1:
				throw e;

			case 2:
				throw new MRHAlertaException(
						getStringBolha(Mensagens.alertaUsuarioInvalido));

			case 3:
				throw new MRHAlertaException(
						getStringBolha(Mensagens.alertaSenhaAtualIncorreta));
			
			case 4:
				throw new MRHAlertaException(
						getStringBolha(Mensagens.alertaNovaSenhaIgualSenhaAtual));

			default:
				throw new MRHErroException(
						getStringBolha(Mensagens.erroSistema));
			}

		} catch (Exception e) {
			throw new MRHErroException(getStringBolha(Mensagens.erroSistema));
		}
	}
	
	/**
	 * Servico de <i>Recuperacao de Senha</i>
	 * @param usuario
	 * @throws MRHAlertaException
	 * @throws MRHErroException
	 */
	public void recuperarSenha(Usuario usuario) throws MRHAlertaException, MRHErroException {
		
		try {

			validaRetornoDB(usuarioDAO.recuperarSenha(usuario));

		} catch (MRHAlertaException e) {

			switch (retorno.getCodRetorno()) {
			case 1:
				throw e;

			case 2:
				throw new MRHAlertaException(
						getStringBolha(Mensagens.alertaUsuarioNaoEncontrado));

			default:
				throw new MRHErroException(
						getStringBolha(Mensagens.erroSistema));
			}

		} catch (Exception e) {
			throw new MRHErroException(getStringBolha(Mensagens.erroSistema));
		}
	}
}
